/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ec.socialfun.controladores;

import com.ec.socialfun.datamanager.IngresoProductosCartaDataManager;
import com.ec.socialfun.entidades.Productos;
import com.ec.socialfun.entidades.Sucursal;
import com.ec.socialfun.enumeradores.EstadoEnum;
import com.ec.socialfun.enumeradores.ParametrosEnum;
import com.ec.socialfun.excepciones.CrearArchivoException;
import com.ec.socialfun.excepciones.ParametroException;
import com.ec.socialfun.excepciones.RegistroProductosException;
import com.ec.socialfun.servicios.ParametrosFacade;
import com.ec.socialfun.servicios.ProductosFacade;
import com.ec.socialfun.servicios.SucursalFacade;
import com.ec.socialfun.servicios.externos.FtpServicio;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;
import org.jboss.logging.Logger;
import org.primefaces.event.FileUploadEvent;

/**
 *
 * @author sebas
 */
@ManagedBean
@RequestScoped
public class IngresoProductosCartaControlador extends PadreControlador {

    private static final Logger LOG = Logger.getLogger(IngresoProductosCartaControlador.class.getName());
    @EJB
    private SucursalFacade sucursalFacade;
    @EJB
    private ProductosFacade productosFacade;
    @EJB
    private FtpServicio ftpServicio;
    @EJB
    private ParametrosFacade parametrosFacade;
    @ManagedProperty(value = "#{ingresoProductosCartaDataManager}")
    private IngresoProductosCartaDataManager ingresoProductosCartaDataManager;

    public IngresoProductosCartaControlador() {
    }

    @Override
    public void iniciarDatos() {
        List<Sucursal> listaSucursales = sucursalFacade.recuperaPorUsuario(this.obtenerUsuarioLogeado());
        getIngresoProductosCartaDataManager().setLocal(listaSucursales.iterator().next().getLoCodigo());
        if (productosFacade.recuperarProductosLocal(getIngresoProductosCartaDataManager().getLocal()) != null) {
            getIngresoProductosCartaDataManager().setListaProductos(productosFacade.recuperarProductosLocal(getIngresoProductosCartaDataManager().getLocal()));
        }
    }

    public IngresoProductosCartaDataManager getIngresoProductosCartaDataManager() {
        return ingresoProductosCartaDataManager;
    }

    public void setIngresoProductosCartaDataManager(IngresoProductosCartaDataManager ingresoProductosCartaDataManager) {
        this.ingresoProductosCartaDataManager = ingresoProductosCartaDataManager;
    }

    public void crearProducto() throws RegistroProductosException {
        LOG.info("CREAR PRODUCTO");
        Productos productos = getIngresoProductosCartaDataManager().getNuevoProducto();
        productosFacade.registrarProducto(getIngresoProductosCartaDataManager().getLocal(), productos);
        getIngresoProductosCartaDataManager().setNuevoProducto(new Productos());
        getIngresoProductosCartaDataManager().setListaProductos(productosFacade.recuperarProductosLocal(getIngresoProductosCartaDataManager().getLocal()));
        this.mensajeExitoso("Producto creado correctamente");
    }

    public void actualizarProducto() {
        LOG.info("PRODUCTOOOS ---- " + getIngresoProductosCartaDataManager().getProductos().getPrNombre());
        Productos producto = getIngresoProductosCartaDataManager().getProductos();
        productosFacade.edit(producto);
        getIngresoProductosCartaDataManager().setProductos(new Productos());
        this.mensajeExitoso("Producto editado Correctamente");
    }

    public void subirFotoProducto(FileUploadEvent event) {
        try {
            getIngresoProductosCartaDataManager().getArchivo().setNombre(event.getFile().getFileName());
            getIngresoProductosCartaDataManager().getArchivo().setInputStream(event.getFile().getInputstream());
            getIngresoProductosCartaDataManager().getArchivo().setCodigo(getIngresoProductosCartaDataManager().getLocal().getLoCodigo());
            getIngresoProductosCartaDataManager().getProducto().setCodigo(getIngresoProductosCartaDataManager().getProductos().getPrCodigo());
            String ruta = ftpServicio.subeImagenProAFtp(getIngresoProductosCartaDataManager().getArchivo(), getIngresoProductosCartaDataManager().getProducto());
            LOG.info("ruta = " + ruta);
            getIngresoProductosCartaDataManager().getProductos().setPrImagen(ruta);
            getIngresoProductosCartaDataManager().setInputStreamsImagenTemporal(null);
            consultarReferenciaAImagen();
            if (!getIngresoProductosCartaDataManager().isReferenciaAImagenes()) {
                getIngresoProductosCartaDataManager().setInputStreamsImagenTemporal(event.getFile().getInputstream());
            }
        } catch (IOException e) {
            LOG.error("Error al subir foto " + e);
            this.mensajeError("Error al subir Imagen");
        } catch (CrearArchivoException e) {
            LOG.error("Error al subir imagen a FTP " + e);
            this.mensajeError("Error al subir imagen a FTP");
        }
    }

    private boolean consultarReferenciaAImagen() {
        boolean referenciaAImagenes = true;
        try {
            referenciaAImagenes = parametrosFacade.recuperaPorNombre(ParametrosEnum.REFERENCIA_A_IMAGENES.getNombre()).getPaValor().equals("SI") ? true : false;
        } catch (ParametroException e) {
            LOG.error("Error al obtener parametro REFERENCIA_A_IMAGENES " + e);
        }
        getIngresoProductosCartaDataManager().setReferenciaAImagenes(referenciaAImagenes);
        return referenciaAImagenes;
    }
}
